<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::util::Basic_string_view&lt; Ch, Traits &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Public API.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1util.html">util</a></li><li class="navelem"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classflow_1_1util_1_1Basic__string__view-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::util::Basic_string_view&lt; Ch, Traits &gt; Class Template Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Essentially alias for a C++17-conforming string-view class template, which is a very lightweight <code>std::string</code>-like representation of a character sequence already in memory.  
 <a href="classflow_1_1util_1_1Basic__string__view.html#details">More...</a></p>

<p><code>#include &lt;string_view.hpp&gt;</code></p>

<p>Inherits std::basic_string_view&lt; Char &gt;.</p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a9697dde34b975822a0f60e2c75c44f46"><td class="memItemLeft" align="right" valign="top"><a id="a9697dde34b975822a0f60e2c75c44f46" name="a9697dde34b975822a0f60e2c75c44f46"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>Base</b> = std::basic_string_view&lt; Ch, Traits &gt;</td></tr>
<tr class="memdesc:a9697dde34b975822a0f60e2c75c44f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs. <br /></td></tr>
<tr class="separator:a9697dde34b975822a0f60e2c75c44f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aaabf738ac0b4248ebfd8c4ad90b71b77"><td class="memItemLeft" align="right" valign="top"><a id="aaabf738ac0b4248ebfd8c4ad90b71b77" name="aaabf738ac0b4248ebfd8c4ad90b71b77"></a>
constexpr&#160;</td><td class="memItemRight" valign="bottom"><b>Basic_string_view</b> () noexcept</td></tr>
<tr class="memdesc:aaabf738ac0b4248ebfd8c4ad90b71b77"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs null view: identical to <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. <br /></td></tr>
<tr class="separator:aaabf738ac0b4248ebfd8c4ad90b71b77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac9c25fae310c10ad497f5e2e81577ef"><td class="memItemLeft" align="right" valign="top">constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#aac9c25fae310c10ad497f5e2e81577ef">Basic_string_view</a> (Ch const *s, size_t count)</td></tr>
<tr class="memdesc:aac9c25fae310c10ad497f5e2e81577ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs view to string at given start location and length: identical to <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API.  <a href="classflow_1_1util_1_1Basic__string__view.html#aac9c25fae310c10ad497f5e2e81577ef">More...</a><br /></td></tr>
<tr class="separator:aac9c25fae310c10ad497f5e2e81577ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8ef1d876e301dfbf11887bca023bc7ec"><td class="memItemLeft" align="right" valign="top">constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a8ef1d876e301dfbf11887bca023bc7ec">Basic_string_view</a> (Ch const *s)</td></tr>
<tr class="memdesc:a8ef1d876e301dfbf11887bca023bc7ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs view to given NUL-terminated string: identical to <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API.  <a href="classflow_1_1util_1_1Basic__string__view.html#a8ef1d876e301dfbf11887bca023bc7ec">More...</a><br /></td></tr>
<tr class="separator:a8ef1d876e301dfbf11887bca023bc7ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8b3bf9d62ecc27175e5ba3fd7438346"><td class="memItemLeft" align="right" valign="top">constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#ac8b3bf9d62ecc27175e5ba3fd7438346">Basic_string_view</a> (const <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a> &amp;s) noexcept</td></tr>
<tr class="memdesc:ac8b3bf9d62ecc27175e5ba3fd7438346"><td class="mdescLeft">&#160;</td><td class="mdescRight">Boring copy constructor: identical to <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API.  <a href="classflow_1_1util_1_1Basic__string__view.html#ac8b3bf9d62ecc27175e5ba3fd7438346">More...</a><br /></td></tr>
<tr class="separator:ac8b3bf9d62ecc27175e5ba3fd7438346"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1031f000ebbe035e7860f500fc763c27"><td class="memItemLeft" align="right" valign="top">constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a1031f000ebbe035e7860f500fc763c27">Basic_string_view</a> (<a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46">Base</a> s)</td></tr>
<tr class="memdesc:a1031f000ebbe035e7860f500fc763c27"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical to copy constructor but converts from a vanilla <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a>.  <a href="classflow_1_1util_1_1Basic__string__view.html#a1031f000ebbe035e7860f500fc763c27">More...</a><br /></td></tr>
<tr class="separator:a1031f000ebbe035e7860f500fc763c27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a46031b242998fc356178152ed1c31a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9a46031b242998fc356178152ed1c31a">Basic_string_view</a> (const std::basic_string&lt; Ch, Traits &gt; &amp;s)</td></tr>
<tr class="memdesc:a9a46031b242998fc356178152ed1c31a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs view directly into a <code>std::basic_string</code> (e.g., <code>std::string</code>).  <a href="classflow_1_1util_1_1Basic__string__view.html#a9a46031b242998fc356178152ed1c31a">More...</a><br /></td></tr>
<tr class="separator:a9a46031b242998fc356178152ed1c31a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29622c65bafdae826514a625262b0fba"><td class="memItemLeft" align="right" valign="top">constexpr <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a29622c65bafdae826514a625262b0fba">operator=</a> (const <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a> &amp;s) noexcept</td></tr>
<tr class="memdesc:a29622c65bafdae826514a625262b0fba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Boring copy assignment: identical to <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API.  <a href="classflow_1_1util_1_1Basic__string__view.html#a29622c65bafdae826514a625262b0fba">More...</a><br /></td></tr>
<tr class="separator:a29622c65bafdae826514a625262b0fba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afdb616000a65f5e65ee99ce7808153e8"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#afdb616000a65f5e65ee99ce7808153e8">starts_with</a> (<a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a> needle) const</td></tr>
<tr class="memdesc:afdb616000a65f5e65ee99ce7808153e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to C++20 <code>basic_string_view::starts_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>.  <a href="classflow_1_1util_1_1Basic__string__view.html#afdb616000a65f5e65ee99ce7808153e8">More...</a><br /></td></tr>
<tr class="separator:afdb616000a65f5e65ee99ce7808153e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0846fbeb776ef1e083a041a7f816567"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#ae0846fbeb776ef1e083a041a7f816567">starts_with</a> (Ch const *needle) const</td></tr>
<tr class="memdesc:ae0846fbeb776ef1e083a041a7f816567"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to C++20 <code>basic_string_view::starts_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>.  <a href="classflow_1_1util_1_1Basic__string__view.html#ae0846fbeb776ef1e083a041a7f816567">More...</a><br /></td></tr>
<tr class="separator:ae0846fbeb776ef1e083a041a7f816567"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2cbc4a17df32bba3f48567c548589874"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a2cbc4a17df32bba3f48567c548589874">starts_with</a> (Ch needle) const</td></tr>
<tr class="memdesc:a2cbc4a17df32bba3f48567c548589874"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to C++20 <code>basic_string_view::starts_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>.  <a href="classflow_1_1util_1_1Basic__string__view.html#a2cbc4a17df32bba3f48567c548589874">More...</a><br /></td></tr>
<tr class="separator:a2cbc4a17df32bba3f48567c548589874"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a546ac9c16e4ab24eab1259f077dbf719"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a546ac9c16e4ab24eab1259f077dbf719">ends_with</a> (<a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a> needle) const</td></tr>
<tr class="memdesc:a546ac9c16e4ab24eab1259f077dbf719"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to C++20 <code>basic_string_view::ends_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>.  <a href="classflow_1_1util_1_1Basic__string__view.html#a546ac9c16e4ab24eab1259f077dbf719">More...</a><br /></td></tr>
<tr class="separator:a546ac9c16e4ab24eab1259f077dbf719"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad13cc300b0ff56191de387d0f7136b9c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#ad13cc300b0ff56191de387d0f7136b9c">ends_with</a> (Ch const *needle) const</td></tr>
<tr class="memdesc:ad13cc300b0ff56191de387d0f7136b9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to C++20 <code>basic_string_view::ends_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>.  <a href="classflow_1_1util_1_1Basic__string__view.html#ad13cc300b0ff56191de387d0f7136b9c">More...</a><br /></td></tr>
<tr class="separator:ad13cc300b0ff56191de387d0f7136b9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee1bcf58abe3b763a0cd15eb213fe458"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#aee1bcf58abe3b763a0cd15eb213fe458">ends_with</a> (Ch needle) const</td></tr>
<tr class="memdesc:aee1bcf58abe3b763a0cd15eb213fe458"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to C++20 <code>basic_string_view::ends_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>.  <a href="classflow_1_1util_1_1Basic__string__view.html#aee1bcf58abe3b763a0cd15eb213fe458">More...</a><br /></td></tr>
<tr class="separator:aee1bcf58abe3b763a0cd15eb213fe458"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><div class="compoundTemplParams">template&lt;typename Ch, typename Traits = std::char_traits&lt;Ch&gt;&gt;<br />
class flow::util::Basic_string_view&lt; Ch, Traits &gt;</div><p >Essentially alias for a C++17-conforming string-view class template, which is a very lightweight <code>std::string</code>-like representation of a character sequence already in memory. </p>
<p >As of March 2022 the alias is formally to <code>std::basic_string_view</code> (unlike in the past, when that was not available &ndash; until C++17). However the alias remains to, at least, avoid breaking user code &ndash; by providing the <a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9" title="Commonly used char-based Basic_string_view. See its doc header.">String_view</a> related alias. In addition this API-only subclass adds <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#afdb616000a65f5e65ee99ce7808153e8" title="Equivalent to C++20 basic_string_view::starts_with() which is lacking in C++17 but present in C++20 a...">starts_with()</a> and <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a546ac9c16e4ab24eab1259f077dbf719" title="Equivalent to C++20 basic_string_view::ends_with() which is lacking in C++17 but present in C++20 and...">ends_with()</a> which implement the common-sense C++20 <code>basic_string_view</code> operations <code><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#afdb616000a65f5e65ee99ce7808153e8" title="Equivalent to C++20 basic_string_view::starts_with() which is lacking in C++17 but present in C++20 a...">starts_with()</a></code> and <code>ends_width()</code>. These existed in the Boost <code>basic_string_view</code> that, pre-C++17, used to be the <code>String_view</code> alias target (when <code>Ch</code> is <code>char</code>). The downgrade due to their lack of inclusion in C++17 (which inaugurated <code>*string_view</code> in C++ STL) is unfortunate; but these replacements are fine.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9" title="Commonly used char-based Basic_string_view. See its doc header.">String_view</a>, which is to <code>std::string_view</code> what the present template is to <code>std::basic_string_view</code>. I.e., when working with <code>char</code> string sequences, which is typical, use <a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9" title="Commonly used char-based Basic_string_view. See its doc header.">String_view</a>.</dd></dl>
<h3>Rationale</h3>
<p >Why is this even a thing? Why not use <code>std::basic_string_view</code> and <code>std::string_view</code> all over? Answer: It is mostly historic. Flow was C++14 until ~3/2022. <code>std::string_view</code> was added in C++17. Before then, <a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9" title="Commonly used char-based Basic_string_view. See its doc header.">String_view</a> aliased to <code>boost::string_view</code> (another possibility would have been <code>boost::string_ref</code> &ndash; same API &ndash; long story), because it was available for C++14. Now that we're on C++17, it's better to use the <code>std</code> thing, especially since many STL (and Boost, nowadays) APIs take <code>std::string_view</code> directly. Hence the alias changed as planned all along.</p>
<p >However the type alias remains. Pragmatically: much code uses <a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9" title="Commonly used char-based Basic_string_view. See its doc header.">String_view</a>, even outside Flow, and there's no harm in an alias, particularly since we add the nice <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#afdb616000a65f5e65ee99ce7808153e8" title="Equivalent to C++20 basic_string_view::starts_with() which is lacking in C++17 but present in C++20 a...">starts_with()</a> and <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a546ac9c16e4ab24eab1259f077dbf719" title="Equivalent to C++20 basic_string_view::ends_with() which is lacking in C++17 but present in C++20 and...">ends_with()</a>. The alias was actively useful before; now removing it is a breaking change.</p>
<h3>Implementation/API note</h3>
<p >It would have been ideal to define the various constructors by simply inheriting all of <code>std::basic_string_view</code> ctors via the single statement <code>using Base::Base</code>. However, at least with our gcc, it appears to cause some issue in propagating <code>constexpr</code>ness of these constructors (which is effectively used, at least, by the <a class="el" href="namespaceflow_1_1log.html" title="Flow module providing logging functionality.">flow::log</a> macros to make certain optimizations possible): compile errors. To avoid this and various conversion issues, a number of constructors are explicitly (re)defined. </p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="aac9c25fae310c10ad497f5e2e81577ef" name="aac9c25fae310c10ad497f5e2e81577ef"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac9c25fae310c10ad497f5e2e81577ef">&#9670;&nbsp;</a></span>Basic_string_view() <span class="overload">[1/5]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::Basic_string_view </td>
          <td>(</td>
          <td class="paramtype">Ch const *&#160;</td>
          <td class="paramname"><em>s</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>count</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs view to string at given start location and length: identical to <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>See <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </td></tr>
    <tr><td class="paramname">count</td><td>See <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a8ef1d876e301dfbf11887bca023bc7ec" name="a8ef1d876e301dfbf11887bca023bc7ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ef1d876e301dfbf11887bca023bc7ec">&#9670;&nbsp;</a></span>Basic_string_view() <span class="overload">[2/5]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::Basic_string_view </td>
          <td>(</td>
          <td class="paramtype">Ch const *&#160;</td>
          <td class="paramname"><em>s</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs view to given NUL-terminated string: identical to <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>See <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ac8b3bf9d62ecc27175e5ba3fd7438346" name="ac8b3bf9d62ecc27175e5ba3fd7438346"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8b3bf9d62ecc27175e5ba3fd7438346">&#9670;&nbsp;</a></span>Basic_string_view() <span class="overload">[3/5]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::Basic_string_view </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a>&lt; Ch, Traits &gt; &amp;&#160;</td>
          <td class="paramname"><em>s</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">default</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Boring copy constructor: identical to <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>See <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a1031f000ebbe035e7860f500fc763c27" name="a1031f000ebbe035e7860f500fc763c27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1031f000ebbe035e7860f500fc763c27">&#9670;&nbsp;</a></span>Basic_string_view() <span class="overload">[4/5]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::Basic_string_view </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46">Base</a>&#160;</td>
          <td class="paramname"><em>s</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Identical to copy constructor but converts from a vanilla <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>See copy constructor. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a9a46031b242998fc356178152ed1c31a" name="a9a46031b242998fc356178152ed1c31a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a46031b242998fc356178152ed1c31a">&#9670;&nbsp;</a></span>Basic_string_view() <span class="overload">[5/5]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::Basic_string_view </td>
          <td>(</td>
          <td class="paramtype">const std::basic_string&lt; Ch, Traits &gt; &amp;&#160;</td>
          <td class="paramname"><em>s</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Constructs view directly into a <code>std::basic_string</code> (e.g., <code>std::string</code>). </p>
<p ><code>basic_string</code> has a conversion operator to <code>basic_string_view</code> but technically not to our slight embellishment thereof, <a class="el" href="classflow_1_1util_1_1Basic__string__view.html" title="Essentially alias for a C++17-conforming string-view class template, which is a very lightweight std:...">Basic_string_view</a>. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>Self-explanatory. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a546ac9c16e4ab24eab1259f077dbf719" name="a546ac9c16e4ab24eab1259f077dbf719"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a546ac9c16e4ab24eab1259f077dbf719">&#9670;&nbsp;</a></span>ends_with() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::ends_with </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a>&lt; Ch, Traits &gt;&#160;</td>
          <td class="paramname"><em>needle</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to C++20 <code>basic_string_view::ends_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">needle</td><td>Possible postfix within <code>*this</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether <code>*this</code> contains <code>needle</code> as postfix. </dd></dl>

</div>
</div>
<a id="ad13cc300b0ff56191de387d0f7136b9c" name="ad13cc300b0ff56191de387d0f7136b9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad13cc300b0ff56191de387d0f7136b9c">&#9670;&nbsp;</a></span>ends_with() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::ends_with </td>
          <td>(</td>
          <td class="paramtype">Ch const *&#160;</td>
          <td class="paramname"><em>needle</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to C++20 <code>basic_string_view::ends_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">needle</td><td>Possible postfix within <code>*this</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether <code>*this</code> contains <code>needle</code> as postfix. </dd></dl>

</div>
</div>
<a id="aee1bcf58abe3b763a0cd15eb213fe458" name="aee1bcf58abe3b763a0cd15eb213fe458"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee1bcf58abe3b763a0cd15eb213fe458">&#9670;&nbsp;</a></span>ends_with() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::ends_with </td>
          <td>(</td>
          <td class="paramtype">Ch&#160;</td>
          <td class="paramname"><em>needle</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to C++20 <code>basic_string_view::ends_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">needle</td><td>Possible postfix within <code>*this</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether <code>*this</code> contains <code>needle</code> as postfix. </dd></dl>

</div>
</div>
<a id="a29622c65bafdae826514a625262b0fba" name="a29622c65bafdae826514a625262b0fba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a29622c65bafdae826514a625262b0fba">&#9670;&nbsp;</a></span>operator=()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a>&lt; Ch, Traits &gt; &amp; <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::operator= </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a>&lt; Ch, Traits &gt; &amp;&#160;</td>
          <td class="paramname"><em>s</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">default</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Boring copy assignment: identical to <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>See <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classflow_1_1util_1_1Basic__string__view.html#a9697dde34b975822a0f60e2c75c44f46" title="Short-hand for the base. We add no data of our own in this subclass, just a handful of APIs.">Base</a> API. </dd></dl>

</div>
</div>
<a id="afdb616000a65f5e65ee99ce7808153e8" name="afdb616000a65f5e65ee99ce7808153e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afdb616000a65f5e65ee99ce7808153e8">&#9670;&nbsp;</a></span>starts_with() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::starts_with </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1util_1_1Basic__string__view.html">Basic_string_view</a>&lt; Ch, Traits &gt;&#160;</td>
          <td class="paramname"><em>needle</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to C++20 <code>basic_string_view::starts_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">needle</td><td>Possible prefix within <code>*this</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether <code>*this</code> contains <code>needle</code> as prefix. </dd></dl>

</div>
</div>
<a id="ae0846fbeb776ef1e083a041a7f816567" name="ae0846fbeb776ef1e083a041a7f816567"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0846fbeb776ef1e083a041a7f816567">&#9670;&nbsp;</a></span>starts_with() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::starts_with </td>
          <td>(</td>
          <td class="paramtype">Ch const *&#160;</td>
          <td class="paramname"><em>needle</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to C++20 <code>basic_string_view::starts_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">needle</td><td>Possible prefix within <code>*this</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether <code>*this</code> contains <code>needle</code> as prefix. </dd></dl>

</div>
</div>
<a id="a2cbc4a17df32bba3f48567c548589874" name="a2cbc4a17df32bba3f48567c548589874"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2cbc4a17df32bba3f48567c548589874">&#9670;&nbsp;</a></span>starts_with() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Ch , typename Traits &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1util_1_1Basic__string__view.html">flow::util::Basic_string_view</a>&lt; Ch, Traits &gt;::starts_with </td>
          <td>(</td>
          <td class="paramtype">Ch&#160;</td>
          <td class="paramname"><em>needle</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to C++20 <code>basic_string_view::starts_with()</code> which is lacking in C++17 but present in C++20 and previously-used-in-Flow Boost equivalent <code>string_view</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">needle</td><td>Possible prefix within <code>*this</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether <code>*this</code> contains <code>needle</code> as prefix. </dd></dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>util/<a class="el" href="string__view_8hpp.html">string_view.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:32 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
